/*
 * @copyright Copyright (c) 2010 Laboratório de Educação Cerebral. (http://www.educacaocerebral.com.br)
 *
 * This file is part of SoftVFC.
 *
 * SoftVFC is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * SoftVFC is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with SoftVFC.  If not, see <http://www.gnu.org/licenses/>.
 *
 * *********************
 *
 * Este arquivo é parte do programa SoftVFC.
 *
 * SoftVFC é um software livre; você pode redistribui-lo e/ou
 * modifica-lo dentro dos termos da Licença Pública Geral GNU como
 * publicada pela Fundação do Software Livre (FSF); na versão 3 da
 * Licença.
 *
 * Este programa é distribuido na esperança que possa ser util,
 * mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer
 * MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
 * Licença Pública Geral GNU para maiores detalhes.
 *
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU
 * junto com este programa, se não, acesse no website oficial:
 * http://www.gnu.org/licenses/gpl.html
 *
 */

package org.softvfc.mixer.aux;

import javax.sound.sampled.*;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**
 *
 * @author Diego Schmaedech Martins (schmaedech@gmail.com)
 * @version 29/07/2010
 */
public class FloatControlComponent extends JPanel implements ChangeListener {

    FloatControl control;
    JSlider slider;
    float min, max, range;
    final static int SLIDER_MIN = 0;
    final static int SLIDER_MAX = 1000;
    final static float SLIDER_RANGE = SLIDER_MAX - SLIDER_MIN;

    public FloatControlComponent (FloatControl c) {
        control = c;
        min = c.getMinimum();
        max = c.getMaximum();
        range = max - min;
        add (new JLabel (control.getMinLabel()));
        slider = new JSlider (SLIDER_MIN, SLIDER_MAX);
        slider.addChangeListener (this);
        setSliderFromControl();
        add (slider);
        add (new JLabel (control.getMaxLabel()));
    }

    private void setSliderFromControl() {
        // figure out value as percent of range
        float offsetValue = control.getValue() - min;
        float percent = 0.0f;
        if (range != 0.0)
            percent = offsetValue / range;
        // apply that to SLIDER_RANGE
        int sliderValue = (int) (percent * SLIDER_RANGE);
        slider.setValue (sliderValue);
    }
    
    private void setControlFromSlider() {
        // figure out slider percentage
        float sliderPercentage = (float) slider.getValue() / SLIDER_RANGE;
        // figure out value for that percentage of range
        float rangeOffset = sliderPercentage * range;
        float newValue = rangeOffset + min;
        control.setValue (newValue);
    }
    // ChangeListener implementation
    @Override
    public void stateChanged (ChangeEvent e) {
            setControlFromSlider();
    }
}
